#ifndef __VDMA_H__

//#include "xparameters.h"
#if defined (XPAR_XAXIVDMA_NUM_INSTANCES)
#define __VDMA_H__

#include "xaxivdma.h"
#include "xil_cache.h"

int vdma_udp_init(void);
int vdma_read_init(short DeviceID,short HoriSizeInput,short VertSizeInput,short Stride,unsigned int FrameStoreStartAddr);
int vdma_write_init(short DeviceID,XAxiVdma *Vdma,short HoriSizeInput,short VertSizeInput,short Stride,unsigned int FrameStoreStartAddr0,unsigned int FrameStoreStartAddr1,unsigned int FrameStoreStartAddr2);
u32 vdma_version();
void vdma_config(void);
void clear_display(void);


#if (XPAR_XAXIVDMA_NUM_INSTANCES >= 1U)
extern	XAxiVdma Vdma0;
#endif
#if (XPAR_XAXIVDMA_NUM_INSTANCES >= 2U)
extern	XAxiVdma Vdma1;
#endif
#if (XPAR_XAXIVDMA_NUM_INSTANCES >= 3U)
extern	XAxiVdma Vdma2;
#endif
#if (XPAR_XAXIVDMA_NUM_INSTANCES >= 4U)
extern	XAxiVdma Vdma3;
#endif
#if (XPAR_XAXIVDMA_NUM_INSTANCES >= 5U)
extern	XAxiVdma Vdma4;
#endif

#endif


#if defined (UDP_VIDEO)

#define NUM_CHANNELS 8

/*
易于切换：
只需修改一个宏即可启用或禁用调试输出。
*/
#define DEBUG_PRINT 0

#if DEBUG_PRINT
    #define DEBUG_PRINTF(format, ...) xil_printf(format, ##__VA_ARGS__)
#else
    #define DEBUG_PRINTF(format, ...)
#endif

#define SEND_PIC 	0
#define SEND_VIDEO 	1


typedef struct {
	u8 channel_ID;
    XAxiVdma Vdma;         // 指向对应的Vdma实例
    u16 DeviceID;           // VDMA设备ID
    u32 FrameBuffers[3];    // 帧缓冲区地址（最多3个）
    u32 Width;              // 图像宽度（像素）
    u32 Height;             // 图像高度（像素）
    u32 Stride;             // 行跨度（字节）
    u32 FrameLength;        // 帧大小（字节）
    u32 S2MM_INTR_ID;
    u8 VIDEO_FLAG;          //0,传图片；1，传视频
    u8 send_pic_start;
    u8 send_video_start;
    int WrIndex;            // 当前写缓冲区索引
    int RdIndex;            // 当前读缓冲区索引
    int WriteOneFrameEnd;   // 写完成标志
    int WriteError;         // 写错误计数
    u16 UDP_IMG_PACKEG_SIZE;//以太网传送一包的长度
    u32 pkg_cnt;            //以太网发送包次数
    u16 udp_send_times;     //一帧发送总包数
} VdmaChannel;

extern VdmaChannel VdmaChannels[NUM_CHANNELS];
#endif //#if defined (UDP_VIDEO)

#endif /* VDMA_H_ */
